Mạng phân tán Kad EMule

(dựa trên giao thức Kademlia)

Kết nối vào mạng

Điều duy nhất cần để kết nối vào mạng là cung mồi, lưu trữ thông tin về địa chỉ IP và cổng của chương trình một máy khách eMule đang kết nối trong mạng Kad. Thông thường, một máy muốn kết nối vào mạng Kad tìm cung mồi thông qua một máy chủ ed2k. Một khi đã được kết nối vào mạng Kad, máy khách sẽ yêu cầu các máy khác trong mạng kiểm tra khả năng kết nối của nó. Có 2 khả năng xảy ra. Thứ nhất, nếu máy khách có thể được kết nối tự do từ bất kì máy nào trong mạng, nó sẽ được cung cấp một ID và được gán trạng thái mở. Trong trường hợp ngược lại, máy khách sẽ được gán trạng thái bị chặn bởi tường lửa. Kể từ phiên bản 0.44a, mạng Kad hỗ trợ khả năng Buddy để giúp các máy khách bị tường lửa. Một buddy là một máy khách trong mạng có trạng thái mở (và do đó có thể kết nối tự do với bất kì máy nào). Máy buddy này đóng vai trò như một cầu nối chuyển tiếp giữa máy bị chặn bởi tường lửa và một máy khách khác trong mạng Kad. Tính năng này giúp cho 2 máy bị tường lửa có thể kết nối và chia sẻ với nhau.

Tìm kiếm trên Kad

Trên mạng Kad tất cả các dạng tìm kiếm đều hoạt động theo một phương thức và được tổng quát hóa thành một hàm tìm kiếm lookup(giá trị cần tìm kiếm). Giá trị cần tìm kiếm là một giá trị băm, đại diện cho một máy khách, một tên tệp, một nguồn tải về,... Do Kad là một mạng phân tán, tất cả hoạt động đều thực hiện thông qua các máy khách vì không tồn tại bất kì máy chủ nào. Về phương thức hoạt động, có thể xem như mỗi máy khách là một máy chủ con, chịu trách nhiệm cho một số nội dung và từ khóa nhất định. Khi nhận được một yêu cầu tìm kiếm từ một máy khách khác, nó kiểm tra xem từ khóa tìm kiếm có phải do mình quản lý hay không. Trong trường hợp từ khóa do máy khách quản lý, nó sẽ gởi về kết quả tìm kiếm dưới dạng địa chỉ nguồn tải về tương ứng với từ khóa. Nếu không phải, nó sẽ sử dụng một thuật toán để xác định một (hay một số) máy khách có khoảng cách đến từ khóa gần hơn khoảng cách từ bản thân nó đến từ khóa. Sau khi xác định nó sẽ chuyển yêu cầu đến máy khách đó. Thuật toán này khá phức tạp nhưng hiệu quả, bảo đảm sau log(2^n) bước chuyển (n là tổng số máy khách trong mạng Kad) sẽ tìm ra máy chịu trách nhiệm cho từ khóa. Độ phức tạp này chính là tính chất cốt yếu của tất cả các mạng DHT (Distributed Hashing Table), trong đó bao gồm Kad.